package core

import (
	"fmt"
	"log"
	"sync"
	"zinx_websokect_poker/zinx_app/poker_game/card"
)

var nTableAutoInc = 0	// 自增的桌子ID
var mpTableList sync.Map // 桌子列表 TTable

// Table 桌子类
type Table struct {
	index       int         // 桌子索引
	full        bool        // 是否满了
	playerList  [9]*Player  // 里面的玩家
	playerCount int
	poke        *card.TDZPK //
	isGaming    int         //是否游戏中

}

// NewTable 新建一个桌子
func NewTable() *Table{
	nTableAutoInc ++
	index := nTableAutoInc
	p := &Table{}
	p.init()
	mpTableList.Store(index, p) // 插入到队列
	return p
}

// FindEmptyTable	找一个空的桌子
func FindEmptyTable() *Table{
	var table *Table
	mpTableList.Range(func(key, value interface{}) bool {
		//在这里判断每一个map里的桌子是否为空
		if value.(*Table).isEmpty() {
			table = value.(*Table)
			return false
		}
		return true
	})
	return table
}

//桌子开始玩耍
func (t *Table) playing() {
	go func() {
		log.Println("游戏正式开始")
		t.poke = card.NewDZPK()
		//发牌
		t.poke.Dealcard(t.playerCount)
		for i := 0; i < t.playerCount; i++ {
			//发牌给客户端
			card := "手牌：" + t.poke.PHandCardList[i].Tostr()
			uncard := "公共牌：" + t.poke.PUnderCardList.Tostr()
			t.playerList[i].Conn.WriteMessage([]byte(card))
			t.playerList[i].Conn.WriteMessage([]byte(uncard))
		}
		log.Println("游戏正式结束")

	}()
}

func (t *Table) init() {
	t.playerCount = 0
}


// 桌子是否满了
func (t *Table) isFull() bool {
	return t.playerCount >= 3
}

//桌子是否空的
func (t *Table) isEmpty() bool {
	return t.playerCount < 3
}

// 桌子上加入一个新玩家
func (t *Table) playerJoin(player *Player){
	t.playerCount++
	fmt.Println("当前桌上有", t.playerCount, "名玩家")

	//TODO 玩家加入桌子要广播给该桌上的所有玩家


	// 循环找空位插入
	for i := 0; i < 9; i++ {
		if t.playerList[i] == nil {
			t.playerList[i] = player
			return
		}
	}



}